package objects;

import java.io.Serializable;
import java.util.ArrayList;

import lfm.mpr.TeamTabsActivity;
import db.AdminBaseDatosHelper;

import android.util.Log;

public class Equipo implements Serializable{
	
	private String Id;
	private String nombre;
	private Jugador portero;
	private String alineacion;
	private int presupuesto_gastado = 0;
	int presupuesto_total = 250;
	private ArrayList<Jugador> defensas;
	private ArrayList<Jugador> medios;
	private ArrayList<Jugador> delanteros;
	private ArrayList<Jugador> list_jugadores;
	private User user;
	private int estado;
	private int modificado;
	//0- borrador
	//1- sincronizado
	//2- Pdt. sincronizar
	
	
	public Equipo(String nombre, Jugador portero, ArrayList<Jugador> defensas,
			ArrayList<Jugador> medios, ArrayList<Jugador> delanteros) {
		super();
		this.nombre = nombre;
		this.portero = portero;
		this.defensas = defensas;
		this.medios = medios;
		this.delanteros = delanteros;
	}
	
	public Equipo() {
		Id = "";
		nombre= "";
		alineacion= "";
		portero = null;
		defensas = new ArrayList<Jugador>();
		medios = new ArrayList<Jugador>();
		delanteros = new ArrayList<Jugador>();
		list_jugadores = new ArrayList<Jugador>();
		estado = -1;
		modificado = 0;
	}
	
	
	
	public int getModificado() {
		return modificado;
	}

	public void setModificado(int modificado) {
		this.modificado = modificado;
	}

	public int getEstado() {
		return estado;
	}

	public void setEstado(int estado) {
		this.estado = estado;
	}

	public String jugador() {
		return nombre;
	}
	
	
	
	public String getId() {
		return Id;
	}

	public void setId(String id) {
		Id = id;
	}
	
	
	public User getUser() {
		return this.user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public void remove_Jugador_list(Jugador jugador){
		this.list_jugadores.remove(jugador);
		this.presupuesto_gastado = this.presupuesto_gastado - jugador.getPrecio();
	}
	
	public ArrayList<Jugador> getList_jugadores() {
		
		list_jugadores.addAll(defensas);
		list_jugadores.addAll(medios);
		list_jugadores.addAll(delanteros);
		list_jugadores.add(portero);
		
		return list_jugadores;
	}
	
	public int Get_Num_Jugadores(){
		int num_jugadores = 0;
		if(portero != null) num_jugadores++;
		num_jugadores = num_jugadores + defensas.size();
		num_jugadores = num_jugadores + medios.size();
		num_jugadores = num_jugadores + delanteros.size();
		return num_jugadores;
	}

	public void setList_jugadores(ArrayList<Jugador> list_jugadores) {
		this.list_jugadores = list_jugadores;
	}

	public String getNombre() {
		// TODO Auto-generated method stub
		return this.nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public Jugador getPortero() {
		return portero;
	}
	public void setPortero(Jugador portero) {
		this.portero = portero;
		//this.presupuesto_gastado = this.presupuesto_gastado + portero.getPrecio();
	}
	public Equipo Borrar_Portero() {
		this.presupuesto_gastado = this.presupuesto_gastado - portero.getPrecio();
		this.portero = null;
		Log.i("LFM_Log","TOTAL " + this.presupuesto_gastado + "MILLONES");
		return this;
	}
	public ArrayList<Jugador> getDefensas() {
		return defensas;
	}
	public void setDefensas(ArrayList<Jugador> defensas) {
		this.defensas = defensas;
	}
	
	public void add_defensa(Jugador defensa){
		
		if(this.defensas.size() > 0) {
			for (int i = 0; i < this.defensas.size(); i++) {
				if(this.defensas.get(i).getPosicion_interna().equals(defensa.getPosicion_interna())){
					this.defensas.set(i, defensa);
					return;
				}
			}
			this.defensas.add(defensa);
		}
		else {
			this.defensas.add(defensa);}
		
		
	}
	
	public void add_medio(Jugador medio){
		
		if(this.medios.size() > 0) {
			for (int i = 0; i < this.medios.size(); i++) {
				if(this.medios.get(i).getPosicion_interna().equals(medio.getPosicion_interna())){
					this.medios.set(i, medio);
					return;
				}
			}
			this.medios.add(medio);
		}
		else {
			this.medios.add(medio);}
	}
	
	public void add_delantero(Jugador delantero){
		
		if(this.delanteros.size() > 0) {
			for (int i = 0; i < this.delanteros.size(); i++) {
				if(this.delanteros.get(i).getPosicion_interna().equals(delantero.getPosicion_interna())){
					this.delanteros.set(i, delantero);
					return;
				}
			}
			this.delanteros.add(delantero);
		}
		else {
			this.delanteros.add(delantero);}
	}
	
	public Equipo borrar_delantero(Jugador delantero){
		
		this.delanteros.remove(delantero);
		this.presupuesto_gastado = this.presupuesto_gastado - delantero.getPrecio();
		Log.i("LFM_Log","TOTAL " + this.presupuesto_gastado + "MILLONES");
		return this;
	}
	
	public Equipo borrar_medio(Jugador medio){
		Log.i("LFM_Log","Borramos el medio " + medio.getNombre());
		this.medios.remove(medio);
		this.presupuesto_gastado = this.presupuesto_gastado - medio.getPrecio();
		Log.i("LFM_Log","TOTAL " + this.presupuesto_gastado + "MILLONES");
		return this;
	}
	
	public Equipo borrar_defensa(Jugador defensa){
		Log.i("LFM_Log","Borramos el defensa " + defensa.getNombre());
		this.defensas.remove(defensa);
		this.presupuesto_gastado = this.presupuesto_gastado - defensa.getPrecio();
		Log.i("LFM_Log","TOTAL " + this.presupuesto_gastado + "MILLONES");
		return this;
	}
	
	public int get_presupuesto_restante(){
		return  presupuesto_total - presupuesto_gastado;
	}
	public ArrayList<Jugador> getMedios() {
		return medios;
	}
	public void setMedios(ArrayList<Jugador> medios) {
		this.medios = medios;
	}
	public ArrayList<Jugador> getDelanteros() {
		return delanteros;
	}
	public void setDelanteros(ArrayList<Jugador> delanteros) {
		this.delanteros = delanteros;
	}
	public String getAlineacion() {
		return alineacion;
	}

	public void setAlineacion(String alineacion) {
		this.alineacion = alineacion;
	}
	
	public boolean existe_portero(){
		if(portero == null) return false;
		else return true;
	}
	
	public boolean valida_alineacion_defensas(){
		
		int num_def = defensas.size();
		boolean result = false;
		
		
		if(alineacion.equals("3-4-3")){
			if(num_def < 3) result = true;
			else result = false;
		}
		else if(alineacion.equals("4-4-2")){
			if(num_def < 4) result = true;
			else result = false;
		}
		else if(alineacion.equals("4-5-1")){
			if(num_def < 4) result = true;
			else result = false;
		}
		
		else if(alineacion.equals("4-3-3")){
			if(num_def < 4) result = true;
			else result = false;
		}
		
		else if(alineacion.equals("3-4-2")){
			if(num_def < 3) result = true;
			else result = false;
		}
		
		return result;
	}
	
	public boolean valida_alineacion_medios(){
		int num_def = medios.size();
		Log.i("LFM_Log","Alineacion " + alineacion);
		Log.i("LFM_Log","Num de medios " + num_def);
		boolean result = false;
		
		if(alineacion.equals("3-4-3")){
			if(num_def < 4) result = true;
			else result = false;
		}
		else if(alineacion.equals("4-4-2")){
			if(num_def < 4) result = true;
			else result = false;
		}
		else if(alineacion.equals("4-5-1")){
			if(num_def < 5) result = true;
			else result = false;
		}
		
		else if(alineacion.equals("4-3-3")){
			if(num_def < 3) result = true;
			else result = false;
		}
		
		else if(alineacion.equals("3-4-2")){
			if(num_def < 4) result = true;
			else result = false;
		}
		
		return result;
	}
	
	public boolean valida_alineacion_delanteros(){
		int num_def = delanteros.size();
		Log.i("LFM_Log","Num de delanteros " + num_def);
		Log.i("LFM_Log","Alineacion " + alineacion);
		boolean result = false;
		
		if(alineacion.equals("3-4-3")){
			if(num_def < 3) result = true;
			else result = false;
		}
		else if(alineacion.equals("4-4-2")){
			if(num_def < 2) result = true;
			else result = false;
		}
		else if(alineacion.equals("4-5-1")){
			if(num_def < 1) result = true;
			else result = false;
		}
		
		else if(alineacion.equals("4-3-3")){
			if(num_def < 3) result = true;
			else result = false;
		}
		
		else if(alineacion.equals("3-4-2")){
			if(num_def < 2) result = true;
			else result = false;
		}
		
		return result;
	}

	public int getPresupuesto_gastado() {
		return presupuesto_gastado;
	}

	public  void setPresupuesto_gastado(int presupuesto) {
		presupuesto_gastado = presupuesto;
	}

	public int getPresupuesto_total() {
		return presupuesto_total;
	}

	public void setPresupuesto_total(int presupuesto_total) {
		this.presupuesto_total = presupuesto_total;
	}
	
	public ArrayList<Jugador> get_lista_jugadores (){
		ArrayList<Jugador> list_jugadores_equipo = new ArrayList<Jugador>();
		list_jugadores_equipo.add(portero);
		list_jugadores_equipo.addAll(defensas);
		list_jugadores_equipo.addAll(medios);
		list_jugadores_equipo.addAll(delanteros);
		return list_jugadores_equipo;
	}
	
	public void Set_Lista_Jugadores_Posicion(ArrayList<Jugador> list_jugadores){
		
		for (int i = 0; i < list_jugadores.size(); i++) {
			
			Jugador jugador = list_jugadores.get(i);
			if(jugador.getPosicion().equals("portero")) this.portero = jugador;
			else if (jugador.getPosicion().equals("defensa")) this.defensas.add(jugador);
				else if (jugador.getPosicion().equals("medio"))this.medios.add(jugador);
					else if (jugador.getPosicion().equals("delantero")) this.delanteros.add(jugador);
		}
		
	}

	public int Numero_Jugadores(){
		int num_jugadores = 0;
		num_jugadores = get_lista_jugadores().size();
		return num_jugadores;
	}
	
	public static int Calcula_Precio_Acumulado_Equipo(Equipo team){
		
		int precio = 0;
		if(team.getPortero()!=null) precio = precio + team.getPortero().getPrecio();
		if(team.getDefensas() != null){
			for (int i = 0; i < team.getDefensas().size(); i++) {
				precio = precio + team.getDefensas().get(i).getPrecio();
			}
		}
		if(team.getMedios() != null){
			for (int i = 0; i < team.getMedios().size(); i++) {
				precio = precio + team.getMedios().get(i).getPrecio();
			}
		}
		if(team.getDelanteros() != null){
			for (int i = 0; i < team.getDelanteros().size(); i++) {
				precio = precio + team.getDelanteros().get(i).getPrecio();
			}
		}
		//setPresupuesto_gastado(precio);
		return precio;
	}
	
	
	
	public static void Print_Equipo(Equipo team){
		
		Log.i("LFM_Log","****************Print Equipo************* ");
		Log.i("LFM_Log","Nombre: " + team.getNombre());
		Log.i("LFM_Log","Alineacion: " + team.getAlineacion());
		Log.i("LFM_Log","Presupuesto_total: " + team.getPresupuesto_total());
		Log.i("LFM_Log","Presupuesto_gastado: " + team.getPresupuesto_gastado());
		
		if(team.getPortero()!=null) Log.i("LFM_Log","Portero: " + team.getPortero().getCodigo() + " - " + team.getPortero().getNombre());
		
		if(team.getDefensas() != null){
			for (int i = 0; i < team.getDefensas().size(); i++) {
				Log.i("LFM_Log","Defensa: " + team.getDefensas().get(i).getCodigo() + " - " + team.getDefensas().get(i).getNombre());
			}
		}
		
		if(team.getMedios() != null){
			for (int i = 0; i < team.getMedios().size(); i++) {
				Log.i("LFM_Log","Medio: " + team.getMedios().get(i).getCodigo() + " - " + team.getMedios().get(i).getNombre());
			}
		}
		
		if(team.getDelanteros() != null){
			for (int i = 0; i < team.getDelanteros().size(); i++) {
				Log.i("LFM_Log","Delantero: " + team.getDelanteros().get(i).getCodigo() + " - " + team.getDelanteros().get(i).getNombre());
			}
		}
		
		
		Log.i("LFM_Log","****************End Print Equipo************* ");
	}
	

}
